Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Exceptions
8 Die Funktionsbibliothek
9 Threads und nebenläufige Programmierung
10 Raum und Zeit
11 Datenstrukturen und Algorithmen
12 Dateien und Datenströme
13 Die eXtensible Markup Language (XML)
14 Grafische Oberflächen mit Swing
15 Grafikprogrammierung
16 Das Netz
17 JavaServer Pages und Servlets
18 Verteilte Programmierung mit RMI und Web–Services
19 Applets, Midlets und Sound
20 Datenbankmanagement mit JDBC
21 Reflection und Annotationen
22 Komponenten durch Bohnen
23 Logging und Monitoring
24 Sicherheitskonzepte
25 Java Native Interface (JNI)
26 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Index

Download:
- ZIP, ca. 12,5 MB
Buch bestellen

Website zum Buch
Weblog des Autors
Ihre Meinung?

Spacer
 <<   zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel

Java ist auch eine Insel
6., akt. und erw. Aufl., mit DVD
1.454 S., 49,90 Euro
Galileo Computing
ISBN 3-89842-838-9
gp 5 Mathematisches
  gp 5.1 Arithmetik in Java
    gp 5.1.1 Mantisse und Exponent
    gp 5.1.2 Spezialwerte Unendlich, Null, NaN
  gp 5.2 Wertebereich eines Typs und Überlaufkontrolle
    gp 5.2.1 Behandlung des Überlaufs
  gp 5.3 Die Eigenschaften der Klasse Math
    gp 5.3.1 Attribute
    gp 5.3.2 Winkelfunktionen
    gp 5.3.3 Runden von Werten
    gp 5.3.4 Wurzel und Exponentialfunktionen
    gp 5.3.5 Der Logarithmus
    gp 5.3.6 Rest der ganzzahligen Division
    gp 5.3.7 Absolutwerte und Maximum/Minimum
    gp 5.3.8 Zufallszahlen
    gp 5.3.9 Der Nächste, bitte
  gp 5.4 Mathe bitte strikt
    gp 5.4.1 Strikt Fließkomma mit strictfp
    gp 5.4.2 Die Klassen Math und StrictMath
  gp 5.5 Die Random-Klasse
  gp 5.6 Große Zahlen
    gp 5.6.1 Die Klasse BigInteger
    gp 5.6.2 Funktionen von BigInteger
    gp 5.6.3 Ganz lange Fakultäten
    gp 5.6.4 Große Fließkommazahlen mit BigDecimal
    gp 5.6.5 Mit MathContext komfortabel die Rechengenauigkeit setzen
  gp 5.7 Rechnen mit Einheiten: Java Units Specification
  gp 5.8 Zum Weiterlesen


Galileo Computing

5.4 Mathe bitte strikt  downtop

Bei der Berechnung mit Fließkommazahlen schreibt die Definition des IEEE-754-Standards vor, wie numerische Berechnungen durchgeführt werden. Damit soll die CPU/FPU für float und double mit 32 beziehungsweise 64 Bit rechnen. In Wirklichkeit rechnet jedoch so gut wie kein mathematischer Prozessor mit diesen Größen, außer vielleicht AMD mit der 3Dnow!-Technologie. Auf der PC-Seite kommen Intel und AMD mit internen Rechengenauigkeiten von 80 Bit, also zehn Byte, zum Zuge. Dieses Dilemma betrifft aber nur 80x86- und andere CISC-Prozessoren. Bei RISC sind 32 Bit und 64 Bit das Übliche. Die 80-Bit-Lösung bringt in Java zwei Nachteile mit sich:

  • Diese Genauigkeit kann Java bisher nicht nutzen.
  • Wegen der starren IEEE-754-Spezifikation kann der Prozessor weniger Optimierungen durchführen, weil er sich immer eng an die Norm halten muss. Das kostet Zeit. Gegebenenfalls können aber die mathematischen Ergebnisse auf unterschiedlichen Maschinen anders aussehen.

Galileo Computing

5.4.1 Strikt Fließkomma mit strictfp  downtop

Damit zum einen die Vorgaben der Norm erfüllt werden und zum anderen die Geschwindigkeit gewährleistet werden kann, lässt sich vor Klassen und Methoden der Modifizierer strictfp setzen, damit Operationen strikt nach der IEEE-Norm vorgehen. Ohne dieses Schlüsselwort (wie es also für unsere meisten Programme der Fall ist) nimmt die JVM eine interne Optimierung vor. Nach außen bleiben die Datentypen 32 Bit und 64 Bit lang, das heißt, bei den Konstanten in double und float ändert sich nichts. Zwischenergebnisse bei Fließkommaberechnungen werden aber eventuell mit höherer Genauigkeit berechnet.


Galileo Computing

5.4.2 Die Klassen Math und StrictMath  toptop

Für strikte mathematische Operationen hat Sun die Klasse StrictMath deklariert. An der Klassendeklaration für StrictMath lässt sich ablesen, dass alle Methoden sich an die IEEE-Norm halten.

public final strictfp class StrictMath { 
 // ... 
}

Allerdings ist es so, dass es keine zwei Implementierungen der mathematischen Funktionen gibt – einmal strikt und genau beziehungsweise einmal nicht strikt, dafür potenziell schneller. Bisher delegiert die Implementierung für Math direkt an StrictMath.

public final strictfp class Math 
{ 
  public static double tan( double a ) { 
    return StrictMath.tan( a ); 
    // default impl. delegates to StrictMath 
  } 
  // ... 
}

Die Konsequenz ist, dass alle Funktionen wie Math.pow() strikt nach IEEE-Norm rechnen. Das ist zwar aus Sicht der Präzision und Übertragbarkeit der Ergebnisse wünschenswert, aber die Performance ist nicht optimal.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.





 <<   zurück



Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de